

// #include "gui_cjson_api.h"

//#if 0

#ifndef __GUI_CJSON_API_H__
#define __GUI_CJSON_API_H__

#include "../utility/cJSON.h"
#include <stdint.h>

#include "iot_node.h"
#include "tcp_api_01.h" 
#include "gw_ktj_tcp_client.h" 

#include "meter.h"


#define  CJSON_PRINT_ENABLE       (0)   //是否允许打印json调试信息

#define  GUI_CJSON_PRINT_ENABLE   (0)   //是否允许打印gui json调试信息---这部分与socket 发送打印重复



    //JSON数据结构转换为JSON字符串
//	cjs_str = cJSON_Print(cjs_root);		         // 有空格符的格式------便于人工阅读识别----调试阶段---------
	//cjs_str = cJSON_PrintUnformatted(cjs_root);    //没有空格符的格式=====提高通信效率------
//cJSON_PrintUnformatted
#define  CJSON_PRINT_UNFORM_ENABLE   	(1)      //没有空格符的格式=====提高通信效率------
 
#define  CJSON_TIME_STAMP_ENABLE   	    (0)      //是否使用 timeStamp 

#define  CJSON_WHITE_LIST_ENABLE   	    (1)      //是否使能 北向协议同步更改 json协议的 white_list 


//#define  gw_ktj_TCP_ClientSend(buf, len)     TCP_API_Send(TCP_API_CH_LOCAL, buf, len)
#define  gw_ktj_TCP_ClientSend(buf, len)     TCP_API_Send_Now(TCP_API_CH_LOCAL, buf, len)


#define  TYPE_CMD   	"cmd"
#define  TYPE_RESPONSE  "response"
#define  TYPE_NOTIFY   	"notify"
#define  TYPE_INDICATE  "indicate"



typedef struct {
    const char *cmd;
    void (*func)(const char *cmd_str, const char* cct_id_str,const int msg_id );
} read_cmd_st;

typedef struct {
    const char *cmd;
    void (*func)(const char *cmd_str, const void *param);
} read_back_st;





//表示485节点， 为0plc节点
#define  CJSON_NODE_TYPE_PLC     	    (0)  
#define  CJSON_NODE_TYPE_RS485   	    (1)   




extern unsigned int  gui_js_api_msg_id ;//gui_msg_id
extern volatile unsigned int  gui_js_api_timeStamp;


#define    READ_CMD_TAB_MAX  (3U)
//#define    READ_CMD_TAB_MAX  (7U)

 extern const read_cmd_st read_cmd_tab[READ_CMD_TAB_MAX];


void json_read_cmd(const char* cmd_str,const char* cct_id_str,const int msg_id );

void json_write_cmd(const char* cmd_str,const char* cct_id_str,const int msg_id );


//////3.20  重启网关  resetGw	40
void json_resetGw( void );

int set_json_comm_item(cJSON *root, const char *ptype, const char *pname, unsigned int msg_id);

//3.33  设置主平台ip端口   mainIpSet
void json_write_mainIpSet(const char* ip_str ,const int port  );

//3.36  设置网关io（继电器） 状态  gwIoSet	49
void json_write_gwIoSet(const char* ouput_data );  //  const int ouput_data  )

//3.40  设置网关以太网ip信息  gwEthIpSet	52
void json_write_gwEthIpSet(const char* ip_str ,const int port ,const char* gateway_str , const char* mask_str );


unsigned int get_input_msgId(const cJSON *json);



void json_read_RS485_meter_name(void);

// 读取外接电表数据
void json_read_RS485_meter(const char* cct_id_str ,const MeterConfig_st* meter );


//3.2  读取白名单  readWhiteList
void json_readWhiteList(void);

///3.17  读白名单在网设备 readOnlineInList	37
void json_readOnlineInList (void);

//3.18  读非白名单在网设备 readOnlineNoList	38
void json_readOnlineNoList(void);

//3.14  读网关信息  readGwMsg  
void json_readGwMsg( void );
void json_readback_readGwMsg(const char *pstr, const void *param);

//3.27 读取设备pid
void json_readPid(void);

//3.32   读取主平台ip端口  mainIpRead	47
void json_mainIpRead(void);

//3.32   读取主平台ip端口  mainIpRead 的应答解析
void json_readback_mainIpRead(const char *pstr, const void *param);

// 3.39  读取网关以太网ip信息  gwEthIpRead
void json_readback_gwEthIpRead(const char *pstr, const void *param);


//3.41  读取网关网络状态信息  gwIfconfigRead
void json_readback_gwIfconfigRead(const char *pstr, const void *param);

void json_cmd_decode(const char *pcString);

void gui_logist_setdataupdate(void );



// 本地广播控制 ====需要新增页面----广播关0%--广播开100%--广播50%---
// 2.2  广播调光
// DEV_TYPE_ROADLAMP = 0x1111,           // 路灯
// DEV_TYPE_ROADLAMP_2COLOR = 0x1212, 		  // 路灯 2色
// DEV_TYPE_ROADLAMP_5COLOR = 0x1215,		  // 路灯 5色
void json_write_cmd_broadcast_dim(const char* pid_str ,const uint8_t power ,const uint8_t bright  );



//组播调光
void json_write_cmd_group_dim(const char* pid_str ,const uint8_t power ,const uint8_t bright  );


//删除白名单
//添加白名单

/////num 不能超过16个
void json_write_cmd_set_white_list_more(dev_mod_info_t* info,iot_node_dev_type_e* iot_type,uint8_t num);

void json_write_cmd_set_white_list(dev_mod_info_t* info,iot_node_dev_type_e iot_type);



/////num 不能超过16个
void json_write_cmd_del_white_list_more(dev_mod_info_t* info,iot_node_dev_type_e* iot_type,uint8_t num);

void json_write_cmd_del_white_list(dev_mod_info_t* info,iot_node_dev_type_e iot_type);

void json_write_cmd_clear_white_list(void );




#endif    //------- __GUI_CJSON_API_H__ 








